#ifndef DEFINES_H_
#define DEFINES_H_

#include <signal.h>
#include <string.h>
#include <string>

//Parametrizaciones por defecto del juego
const unsigned short int VIDAS_POR_DEFECTO = 3;	//Cantidad de vidas por defecto de felix.
const int MSJ_LENGHT = 5;						//Tamaño por defecto del msj char a enviar en las acciones t_accion.
const std::string ARCH_CONFIG="archivoconfiguracion";//Donde se encuentra el archivo de configuracion.
const int MAX_PUERTO_SERVER = 65536;			//Maximo valor para el puerto del servidor.
const int MIN_PUERTO_SERVER = 10000;			//Minimo valor para el puerto del servidor.

/* Seniales enviadas */
const int SENIAL_FIN_DAEMON = SIGTERM;		//Senial que envia el daemon al servidor partida para finalizar la partida en emergencia.
const int SENIAL_FIN_TORNEO = SIGINT;		//Senial que envia el servidor de torneo al de partida para finalizar la partida .
const int SENIAL_FIN_PARTIDA= SIGUSR1;		//Senial que envia el Thread0 a sus threads para finalizar la partida.

//Pantalla
const int ALTO_RESOLUCION=600;		//Pixeles=de=alto=del=screen.
const int ANCHO_RESOLUCION=800;		//Pixeles=de=ancho=del=screen.
const int LIM_SUP=200;				//Limite=superior=de=pixeles=para=objetos.
const int LIM_INF=533;				//Limite=inferior=de=pixeles=para=objetos.
const int LIM_IZQ=800;				//Limite=izquierdo=de=pixeles=para=objetos.
const int LIM_DER=0;				//Limite=derecho=de=pixeles=para=objetos.

//											Movimientos											//
//Ancho en movimientos
const int ANCHO_MOV_X_MARIO=71;		//Cuantos=se=mueve=en=x=por=defecto=felix.
const int ANCHO_MOV_Y_MARIO=111;	//Cuantos=se=mueve=en=y=por=defecto=felix.
const int ANCHO_MOV_X_DONKEY=71;		//Cuantos=se=mueve=en=x=por=defecto=ralph.
const int ANCHO_MOV_Y_FUEGO=71;		//Cuantos=se=mueve=en=y=por=defecto=objetos.
const int ANCHO_MOV_X_OBJ=30;		//Cuantos=se=mueve=en=x=por=defecto=objetos.
const int ANCHO_MOV_Y_OBJ=55;		//Cuantos=se=mueve=en=y=por=defecto=objetos.

//											Velocidades											//
const int SPEED_ANIM=300000;		//Lapso entre animacion de los objetos animados .
const int SPEED_REFRESH_RANK=500000;//Lapso entre refresco y refresco de la info brindada del servidor torneo hacia el partida por shm.
const int FPS_JUEGO=500000;			//Lapso entre refresco y refresco de la pantalla en el cliente.

//										Numeros Bools o Strings									//
const int  CONST_CERO=0;			//Vale=0
const int  CONST_MENOS_UNO = -1;	//Vale=-1
const int  CONST_UNO=1;				//Vale==1
const int  CONST_TRES=3;			//Vale 3
const int  CONST_DOS=2;			//Vale 2
const int  CONST_CUATRO=4;			//Vale 4
const int  CONST_CINCO=5;			//Vale 5
const int  CONST_SEIS=6;			//Vale 6
const int  CONST_SIETE=7;			//Vale 7
const int  CONST_OCHO=8;			//Vale 7
const int  CONST_NUEVE=9;			//Vale 7
const bool CONST_TRUE=true;			//Vale true
const bool CONST_FALSE=false;		//Vale false
const unsigned short int CONST_MAX_UINT = 255;		//Maximo numero de entidades

//											Acciones											//
/* Incializaciones */
const  short int ACC_INIT_PARTIDA = 1;	//Inicia la partida creando los elementos básicos y indicando a los jugadores que numero de jugador son y el nombre del otro jugador
const  short int ACC_INIT_NIVEL = 2;	//Inicia el nivel ingresado por parametro, con la dificultad que le corresponda.
const  short int ACC_INIT_XXXX = 3;	//Inicia el tramo sorteando los objetos con la semilla que se envia por parámetro.
const  short int ACC_ACT_PUNT = 4;		//Actualiza el puntaje del jugador enviado por id_Entidad
const  short int ACC_ACT_RANK = 5;		//Actualiza el ranking en el cliente para el jugador enviado en la accion.
const  short int ACC_COMENZAR = 6;

// TODO: Ver accion AAC_COMENZAR

const  short int ACC_MOVER=7;				//Accion=mover=un=elemento=del=juego
const  short int  ACC_REPARARXXXX=8;			//Se=usa=para=que=felix=repare=y=la=ventana=sea=reparada
const  short int  ACC_SALIR_JUEGO=9;		//Cuando=un=jugador=quiere=salir=del=juego,=envia=esta=accion.=y=es=eliminado=del=juego=partida=y=torneo.
const  short int  ACC_CREAR_MARTILLO=10;		//Crea=un=elemento=torta=dentro=del=juego,=enviando=el=numero=de=vidrio=al=cliente=donde=se=crea=la=torta,=eso=define=el=x,=y.
const  short int  ACC_DELETE_MARTILLO=11;		//Elimina=un=elemento=torta=dentro=del=juego,=enviando=el=numero=de=vidrio=al=cliente=donde=se=elimina=la=torta.
const  short int  ACC_CONSUMIR_MARTILLO=12;	//Accion que envia el servidor al jugador para avisar que felix es inmune.
const  short int  ACC_CREAR_FUEGO=13;			//Activa=el=elemento=ave=dentro=del=juego=cambiando=el=estado=a=activo=en=el=servidor=y=enviando=el=numero=de=vidrio=al=cliente=donde=se=crea=la=torta.
const  short int  ACC_DELETE_FUEGO=14;		//Elimina=un=elemento=ave=dentro=del=juego,=enviando=el=numero=de=vidrio=al=cliente=donde=se=elimina=la=torta.
const  short int  ACC_CREAR_BARRIL=15;	//Activa=un=ladrillo=dentro=del=juego,=cambiando=el=estado=en=el=servidor=y=enviandole=el=x,=y=donde=posicionarlo=en=la=pantalla=al=cliente.
const  short int  ACC_DELETE_BARRIL=16;	//Desaparece=un=elemento=de=la=pantalla.
const  short int  ACC_LANZAR_BARRIL=17;	//Desaparece=un=elemento=de=la=pantalla.
const  short int  ACC_RESTAR_VIDA=18;		//Se=le=quita=una=vida=al=jugador=enviado=en=la=acccion.
const  short int  ACC_MORIR=19;				//Se=da=cuando=un=jugador=pierde=las=3=vidas,=no=puede=seguir=jugando=esta=partida=pero=sigue=en=el=torneo.

/* Fin de tramo nivel o partida */
const  short int  ACC_FIN_TRAMO=20;			//Finaliza el tramo en juego.
const  short int  ACC_FIN_NIVEL=21;			//Finaliza el nivel en juego.
const  short int  ACC_FIN_PARTIDA=22;		//Se da cuando ambos jugadores pierden las 3 vidas, o salieron del juego.
const  short int  ACC_FIN_TORNEO = 23;		//Indica quese termino el torneo.


//ID de imagenes
const unsigned char  VACIO= 0	;
const unsigned char  BARRA_SUP=17	;
const unsigned char  PANEL_SUP=18	;
const unsigned char  BANDA_NEGRA=19	;
const unsigned char  BARRA_INF=20	;
const unsigned char  MARTILLO1= 23	;
const unsigned char  TORTA2= 24	;
const unsigned char  BARRIL1=25	;
const unsigned char  BARRIL2=26	;
const unsigned char  MARIO1= 27	;
const unsigned char  MARIO2= 28	;
const unsigned char  FUEGO1= 30	;
const unsigned char  FUEGO2= 31	;
const unsigned char  MARIO_INMUNE=32;
	;
const unsigned char  DONKEY1= 33	;
const unsigned char  DONKEY2= 34	;
const unsigned char  DONKEY3= 35	;
const unsigned char  DONKEY4= 36	;
const unsigned char  DONKEY5= 37	;
const unsigned char  DONKEY6= 38	;
const unsigned char  DONKEY7= 39	;
const unsigned char  DONKEY8= 40	;
const unsigned char  DONKEY9= 41	;
const unsigned char  DONKEY10= 42	;
const unsigned char  DONKEY11= 43	;
	;
const unsigned char  CERO=128	;
const unsigned char  UNO=129	;
const unsigned char  DOS=130	;
const unsigned char  TRES=131	;
const unsigned char  CUATRO=132	;
const unsigned char  CINCO=133	;
const unsigned char  SEIS=134	;
const unsigned char  SIETE=135	;
const unsigned char  OCHO=136	;
const unsigned char  NUEVE=137	;
const unsigned char  A1=138	;
const unsigned char  B1=139	;
const unsigned char  C1=140	;
const unsigned char  D1=141	;
const unsigned char  E1=142	;
const unsigned char  F1=143	;
const unsigned char  G1=144	;
const unsigned char  H1=145	;
const unsigned char  I1=146	;
const unsigned char  J1=147	;
const unsigned char  K1=148	;
const unsigned char  L1=149	;
const unsigned char  M1=150	;
const unsigned char  N1=151	;
const unsigned char  O1=153	;
const unsigned char  P1=154	;
const unsigned char  Q1=155	;
const unsigned char  R1=156	;
const unsigned char  S1=157	;
const unsigned char  T1=158	;
const unsigned char  U1=159	;
const unsigned char  V1=160	;
const unsigned char  W1=161	;
const unsigned char  X1=162	;
const unsigned char  Y1=163	;
const unsigned char  Z1=164	;
const unsigned char  A2=165	;
const unsigned char  B2=166	;
const unsigned char  C2=167	;
const unsigned char  D2=168	;
const unsigned char  E2=169	;
const unsigned char  F2=170	;
const unsigned char  G2=171	;
const unsigned char  H2=172	;
const unsigned char  I2=173	;
const unsigned char  J2=174	;
const unsigned char  K2=175	;
const unsigned char  L2=176	;
const unsigned char  M2=177	;
const unsigned char  N2=178	;
const unsigned char  O2=180	;
const unsigned char  P2=181	;
const unsigned char  Q2=182	;
const unsigned char  R2=183	;
const unsigned char  S2=184	;
const unsigned char  T2=185	;
const unsigned char  U2=186	;
const unsigned char  V2=187	;
const unsigned char  W2=188	;
const unsigned char  X2=189	;
const unsigned char  Y2=190	;
const unsigned char  Z2=191	;

const unsigned char  ESCENARIO=192;

#define ID_DONKEY     52
#define ID_MARIO1    53
#define ID_MARIO2    54
#define ID_FUEGO    55
#define ID_MARTILLO     56
#define ID_BARRIL_INI  57
#define ID_BARRIL_CANT 5
#define ID_BARRIL0  57
#define ID_BARRIL1  58
#define ID_BARRIL2  59
#define ID_BARRIL3  60
#define ID_BARRIL4  61

//ids Jugadores
#define JUGADOR1 1
#define JUGADOR2 2
#define CONST_CANT_VIDAS '3'

#define FPS 30 // Fotogramas por segundo

#endif /*DEFINES_H_*/

